#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
  printf("i am father process!pid:%d,pid:%d\n",getpid(),getppid());
  pid_t id=fork();
  if(id==0)
  {
    printf("i am child process!pid:%d,ppid:%d\n",getpid(),getppid());
    sleep(5);
    exit(123);
  }
  sleep(10);
  //father
  int status = 0;
  pid_t rid=waitpid(id,&status,0);
  if(rid>0)
  {
    printf("wait success! child quit code:%d,child quit signal:%d\n",(status>>8)&0xFF,status&0x7F);
  }
  else
  {
    printf("wait fail!\n");  
  }
  //pid_t rid=wait(NULL);
  //if(rid>0)
  //{
  //  printf("wait success!rid:%d\n",rid);
  //}
  return 0;
}

//int main()
//{
//  printf("hello 111");
//  sleep(2);
//
//  _exit(3);
//}
//enum 
//{
//  success=0,
//  Div_Zero,
//  Mod_Zero,
//};
//int exit_code =success;
//
//const char *CodeToErrString(int code)
//{
//  switch(code)
//  {
//    case success:
//      return "success";
//    case Div_Zero:
//      return "div zero";
//    case Mod_Zero:
//      return "mod zero";
//    default:
//      return "unknow err";
//  }
//}
//int Div(int x,int y)
//{
//  if(y==0)
//  {
//    exit_code=Div_Zero;
//    return -1;
//  }
//  else
//  {
//   // exit_code=success;
//   // return x/y;
//   //exit(13);
//  _exit(31);
//  }
//}
//int main()
//{
//  //int *p=NULL;
//  //while(1)
//  //{
//  //  printf("i am a process pid:%d,ppid:%d\n",getpid(),getppid());
//  //  sleep(1);
//  //  //*p=100;
//  //  exit(123);
//  //}
//  int ret=Div(10,100);
//  printf("result:%d,[%s]\n",ret,CodeToErrString(exit_code));
// // ret=Div(10,10);
// // printf("result:%d,[%s]\n",ret,CodeToErrString(exit_code));
// // return exit_code;
//  //for(int errcode=0;errcode<255;errcode++)
//  //{
//  //  printf("%d: %s\n",errcode,strerror(errcode));
//  //}
//  return 0;
//}
